package ycl.common.utils;//package ycl.common.utils;
//
//import cn.hutool.crypto.SecureUtil;
//import com.nimbusds.jose.JOSEException;
//import com.nimbusds.jose.JWSAlgorithm;
//import com.nimbusds.jose.JWSHeader;
//import com.nimbusds.jose.crypto.MACSigner;
//import com.nimbusds.jose.crypto.MACVerifier;
//import com.nimbusds.jwt.JWTClaimsSet;
//import com.nimbusds.jwt.SignedJWT;
//import lombok.extern.slf4j.Slf4j;
//import ycl.common.constants.SecurityConstant;
//import ycl.common.enums.ApiResultEnum2;
//import ycl.common.exception.CustomException;
//
//import java.text.ParseException;
//import java.time.LocalDateTime;
//import java.util.Date;
//
///**
// * 加密工具
// *
// * @author: YCL
// * @date: 2021-06-10 21:47:51
// */
//@Slf4j
//public class CryptoUtil {
//
//
//	/**
//	 * 获取加密密码
//	 *
//	 * @param password 密码
//	 * @param salt     加密盐
//	 * @return 加密后的字符串
//	 */
//	public static String cryptoPassword(String password, String salt) {
//		return SecureUtil.sha256(password + salt);
//	}
//
//
//	/**
//	 * 创建token
//	 *
//	 * @param payload 负荷, 一般是JSON OBJECT.toJSONString(user)
//	 * @return token
//	 * @throws JOSEException 异常
//	 */
//	public static String createToken(String payload) throws JOSEException {
//		//签名对象
//		MACSigner signer = new MACSigner(payload);
//		JWTClaimsSet claims = new JWTClaimsSet.Builder()
//				//
//				.subject(SecurityConstant.SUBJECT)
//				//负载对象
//				.claim(SecurityConstant.PAYLOAD, payload)
//				//到期时间
//				.expirationTime(new Date(System.currentTimeMillis() + SecurityConstant.EXPIRE_TIME))
//				//构建
//				.build();
//
//		//初始化加密方式
//		JWSHeader header = new JWSHeader(JWSAlgorithm.HS256);
//		//创建签名
//		SignedJWT sign = new SignedJWT(header, claims);
//		sign.sign(signer);
//
//		//生成token
//		return sign.serialize();
//	}
//
//
//	public static boolean verifyToken(String header) {
//		try {
//			return verifyToken(header, false);
//		} catch (ParseException | JOSEException e) {
//			e.printStackTrace();
//		}
//		System.out.println();
//		return false;
//	}
//
//
//	/**
//	 * 获取用户签名
//	 *
//	 * @param header 请求头
//	 * @return 签名
//	 * @throws ParseException 转换异常
//	 */
//	public static SignedJWT getSignedJWT(String header) throws ParseException {
//		String token = header.replace(SecurityConstant.TOKEN_PREFIX, "");
//		log.info("token === {}", token);
//		return SignedJWT.parse(token);
//	}
//
//
//	/**
//	 * token 校验
//	 *
//	 * @param header  请求头
//	 * @param execute 是否继续执行下面操作
//	 * @return t f
//	 */
//	public static boolean verifyToken(String header, boolean execute) throws JOSEException, ParseException {
//		SignedJWT jwt = getSignedJWT(header);
//		MACVerifier verifier = new MACVerifier(SecurityConstant.SECRET);
//
//		JWTClaimsSet set = jwt.getJWTClaimsSet();
//		//校验超时
//		LocalDateTime time = DateTimeUtil.dateToLocalDateTime(set.getExpirationTime());
//
//		if (! jwt.verify(verifier)//校验有效
//				|| LocalDateTime.now().isAfter(time)//校验超时
//		) {
//			log.error("token 失效 === {}", header);
//			if (execute)
//				return false;
//			throw new CustomException(ApiResultEnum2.SC_UNAUTHORIZED);
//		}
//		return true;
//	}
//
//}
//
//
